Multiple models can be inserted as a batch. As described in the previous example, the DataContext#insert method accepts an object as a parameter. Each property in that object should map to a table, and the value associated with each property should be one or more models.
In the following example, two bike_shops records and one bikes record are inserted in a batch. As with the previous example, note that the primary key of each model is automatically added after the insert is completed.
'use strict';
const MySQLDriver = require('node-data-mapper-mysql').MySQLDriver;
const driver = new MySQLDriver(require('../bikeShopConOpts.json'));
driver
.initialize()
.then(runQuery)
.then(printResult)
.catch(console.error)
.finally(() => driver.end());
function runQuery(dataContext) {
// Insert two bike_shops records and a single bikes record in a batch.
const query = dataContext
.insert({
bike_shops: [
{
name: 'Cycle City',
address: '82 Bloom St.'
},
{
name: 'Cadence and Clip',
address: '7712 Ackworth Barn Dr.'
}
],
bikes: {
brand: 'Gary Fisher',
model: 'Remedy',
msrp: 5499.99
}
});
console.log('Query:');
console.log(query.toString(), '\n');
return query
.execute();
}
function printResult(result) {
console.log('Result:');
console.log(result);
}
Run this example ($ node example/create/insertMultiple.js) and the following output will be displayed.
Query:
INSERT INTO `bike_shops` (`name`, `address`)
VALUES (:name, :address);
INSERT INTO `bike_shops` (`name`, `address`)
VALUES (:name, :address);
INSERT INTO `bikes` (`brand`, `model`, `msrp`)
VALUES (:brand, :model, :msrp)
Result:
{ bike_shops:
[ { name: 'Cycle City', address: '82 Bloom St.', bikeShopID: 4 },
{ name: 'Cadence and Clip',
address: '7712 Ackworth Barn Dr.',
bikeShopID: 5 } ],
bikes:
{ brand: 'Gary Fisher',
model: 'Remedy',
msrp: 5499.99,
bikeID: 11 } }